home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / UI / ADnoteUI.fl next >
Text File  |  2005-03-14  |  47KB  |  1,108 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0106 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} 
  6.  
  7. decl {//License: GNU GPL version 2} {} 
  8.  
  9. decl {\#include "../Params/ADnoteParameters.h"} {public
  10.  
  11. decl {\#include "../Misc/Util.h"} {public
  12.  
  13. decl {\#include "../Misc/Master.h"} {public
  14.  
  15. decl {\#include "ResonanceUI.h"} {public
  16.  
  17. decl {\#include <FL/Fl_Box.H>} {public
  18.  
  19. decl {\#include <FL/Fl_Group.H>} {public
  20.  
  21. decl {\#include <math.h>} {} 
  22.  
  23. decl {\#include <stdio.h>} {} 
  24.  
  25. decl {\#include <stdlib.h>} {} 
  26.  
  27. decl {\#include <string.h>} {} 
  28.  
  29. decl {\#include "WidgetPDial.h"} {public
  30.  
  31. decl {\#include "EnvelopeUI.h"} {public
  32.  
  33. decl {\#include "LFOUI.h"} {public
  34.  
  35. decl {\#include "FilterUI.h"} {public
  36.  
  37. decl {\#include "OscilGenUI.h"} {public
  38.  
  39. decl {\#include "PresetsUI.h"} {public
  40.  
  41. class ADvoicelistitem {: {public Fl_Group}
  42. } {
  43.   Function {make_window()} {private
  44.   } {
  45.     Fl_Window ADnoteVoiceListItem {
  46.       private xywh {247 599 615 30} type Double hide
  47.       class Fl_Group
  48.     } {
  49.       Fl_Group voicelistitemgroup {
  50.         private xywh {50 0 570 25} box FLAT_BOX
  51.         code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  52.       } {
  53.         Fl_Value_Slider voicevolume {
  54.           callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  55.           tooltip Volume xywh {90 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
  56.           code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  57.         }
  58.         Fl_Check_Button voiceresonanceenabled {
  59.           callback {pars->VoicePar[nvoice].Presonance=(int)o->value();}
  60.           tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 12 align 4
  61.           code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  62.         }
  63.         Fl_Value_Slider voicelfofreq {
  64.           callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();}
  65.           tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
  66.           code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);}
  67.         }
  68.         Fl_Dial voicepanning {
  69.           callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  70.           tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 11 align 4 maximum 127 step 1
  71.           code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  72.           class WidgetPDial
  73.         }
  74.         Fl_Group voiceoscil {open
  75.           xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  76.           code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  77.           code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  78.           code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}}
  79.         } {}
  80.         Fl_Value_Output detunevalueoutput {
  81.           callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  82.           xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  83.           code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  84.         }
  85.         Fl_Slider voicedetune {
  86.           callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  87. detunevalueoutput->do_callback();}
  88.           tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  89.           code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  90.         }
  91.         Fl_Box noiselabel {
  92.           label N
  93.           callback {if (pars->VoicePar[nvoice].Type==0) {
  94.   o->hide();
  95.   voiceresonanceenabled->activate();
  96.   detunevalueoutput->activate();
  97.   voicedetune->activate();
  98.   voicelfofreq->activate();
  99.   voiceoscil->activate();
  100. } else {
  101.   o->show();
  102.   voiceresonanceenabled->deactivate();
  103.   detunevalueoutput->deactivate();
  104.   voicedetune->deactivate();
  105.   voicelfofreq->deactivate();
  106.   voiceoscil->deactivate();
  107. };}
  108.           xywh {65 5 20 20} labelfont 1 labelsize 16 labelcolor 7
  109.           code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();}
  110.         }
  111.       }
  112.       Fl_Check_Button voiceenabled {
  113.         label 01
  114.         callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  115. if (o->value()==0) voicelistitemgroup->deactivate();
  116. else voicelistitemgroup->activate();
  117. o->redraw();}
  118.         private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 4
  119.         code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  120.         code1 {o->value(pars->VoicePar[nvoice].Enabled);}
  121.       }
  122.     }
  123.   }
  124.   Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  125.     code {nvoice=0;
  126. pars=NULL;} {}
  127.   }
  128.   Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
  129.     code {pars=parameters;
  130. nvoice=nvoice_;
  131. master=master_;
  132. make_window();
  133. ADnoteVoiceListItem->show();
  134. end();} {}
  135.   }
  136.   Function {refreshlist()} {} {
  137.     code {voiceenabled->value(pars->VoicePar[nvoice].Enabled);
  138. voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
  139. voicevolume->value(pars->VoicePar[nvoice].PVolume);
  140. voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
  141. voicepanning->value(pars->VoicePar[nvoice].PPanning);
  142. voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
  143. if (pars->VoicePar[nvoice].Pextoscil != -1) {
  144.   osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  145. } else 
  146.   osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
  147. if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
  148.     else voicelistitemgroup->activate();
  149. detunevalueoutput->do_callback();
  150. noiselabel->do_callback();
  151. ADnoteVoiceListItem->redraw();} {}
  152.   }
  153.   Function {~ADvoicelistitem()} {} {
  154.     code {ADnoteVoiceListItem->hide();
  155. //delete(ADnoteVoiceListItem);} {}
  156.   }
  157.   decl {ADnoteParameters *pars;} {}
  158.   decl {int nvoice;} {}
  159.   decl {Oscilloscope *osc;} {}
  160.   decl {Master *master;} {}
  161.  
  162. class ADvoiceUI {: {public Fl_Group}
  163. } {
  164.   Function {make_window()} {} {
  165.     Fl_Window ADnoteVoiceParameters {
  166.       label Voice
  167.       xywh {231 132 765 525} type Double hide
  168.       class Fl_Group
  169.     } {
  170.       Fl_Group voiceparametersgroup {
  171.         xywh {0 0 765 525} box THIN_UP_BOX color 48
  172.         code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
  173.       } {
  174.         Fl_Group voicemodegroup {
  175.           xywh {0 5 760 515}
  176.         } {
  177.           Fl_Group voiceFMparametersgroup {
  178.             label MODULATOR
  179.             xywh {530 5 230 515} box THIN_UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 18 align 17
  180.             code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();}
  181.           } {
  182.             Fl_Group modfrequency {
  183.               label {Mod.FREQUENCY}
  184.               xywh {535 220 220 145} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  185.             } {
  186.               Fl_Group voiceFMfreqenvgroup {
  187.                 label {ADSynth Modulator - Frequency Envelope}
  188.                 xywh {540 290 205 70} box FLAT_BOX color 51 align 144
  189.                 code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);}
  190.                 code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();}
  191.                 class EnvelopeUI
  192.               } {}
  193.               Fl_Check_Button {} {
  194.                 label Enable
  195.                 callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
  196. if (o->value()==0) voiceFMfreqenvgroup->deactivate();
  197. else voiceFMfreqenvgroup->activate();
  198. o->redraw();}
  199.                 tooltip {Forced Relase} xywh {545 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  200.                 code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);}
  201.               }
  202.               Fl_Counter {} {
  203.                 label {Coarse Det.}
  204.                 callback {int k=(int) o->value();
  205. if (k<0) k+=1024;
  206. pars->VoicePar[nvoice].PFMCoarseDetune = k+
  207.    (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;}
  208.                 tooltip {Coarse Detune} xywh {685 270 60 15} labelsize 11 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  209.                 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  210.                 code1 {if (k>=512) k-=1024;}
  211.                 code2 {o->value(k);}
  212.                 code3 {o->lstep(10);}
  213.               }
  214.               Fl_Counter {} {
  215.                 label Octave
  216.                 callback {int k=(int) o->value();
  217. if (k<0) k+=16;
  218. pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
  219.    pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
  220.                 tooltip Octave xywh {625 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  221.                 code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;}
  222.                 code1 {if (k>=8) k-=16;}
  223.                 code2 {o->value(k);}
  224.               }
  225.               Fl_Slider {} {
  226.                 callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
  227. fmdetunevalueoutput->do_callback();}
  228.                 tooltip {Fine Detune (cents)} xywh {590 245 160 10} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  229.                 code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);}
  230.               }
  231.               Fl_Value_Output fmdetunevalueoutput {
  232.                 label Detune
  233.                 callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
  234.                 xywh {540 245 45 13} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
  235.                 code0 {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
  236.                 code1 {//o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));}
  237.               }
  238.               Fl_Choice {} {
  239.                 label {Detune Type}
  240.                 callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
  241. fmdetunevalueoutput->do_callback();} open
  242.                 xywh {540 270 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  243.                 code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  244.                 code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);}
  245.               } {}
  246.             }
  247.             Fl_Group {} {
  248.               label {Mod.AMPLITUDE}
  249.               xywh {535 60 220 160} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  250.             } {
  251.               Fl_Value_Slider {} {
  252.                 label Vol
  253.                 callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();}
  254.                 tooltip Volume xywh {540 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  255.                 code0 {o->value(pars->VoicePar[nvoice].PFMVolume);}
  256.               }
  257.               Fl_Value_Slider {} {
  258.                 label {V.Sns}
  259.                 callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();}
  260.                 tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  261.                 code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);}
  262.               }
  263.               Fl_Group voiceFMampenvgroup {
  264.                 label {ADSynth Modulator - Amplitude Envelope} open
  265.                 xywh {540 145 205 70} box FLAT_BOX color 51 align 144
  266.                 code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);}
  267.                 code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();}
  268.                 class EnvelopeUI
  269.               } {}
  270.               Fl_Check_Button {} {
  271.                 label Enable
  272.                 callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
  273. if (o->value()==0) voiceFMampenvgroup->deactivate();
  274. else voiceFMampenvgroup->activate();
  275. o->redraw();}
  276.                 tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  277.                 code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);}
  278.               }
  279.               Fl_Value_Slider {} {
  280.                 label {F.Damp}
  281.                 callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;}
  282.                 tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 minimum -64 maximum 63 step 1
  283.                 code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);}
  284.               }
  285.             }
  286.             Fl_Group modoscil {
  287.               xywh {535 365 220 150}
  288.             } {
  289.               Fl_Group fmoscil {open
  290.                 xywh {535 405 220 110} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  291.                 code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  292.                 code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
  293.                 code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);}
  294.               } {}
  295.               Fl_Box {} {
  296.                 label {Mod.Oscillator}
  297.                 xywh {535 365 155 20} labelfont 1 align 20
  298.               }
  299.               Fl_Button changeFMoscilbutton {
  300.                 label Change
  301.                 callback {if (oscedit!=NULL) delete(oscedit);
  302.  
  303. int nv=nvoice;
  304. if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
  305.  
  306. oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);} selected
  307.                 xywh {700 370 55 15} box THIN_UP_BOX labelfont 1 labelsize 12
  308.                 code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);}
  309.               }
  310.               Fl_Slider {} {
  311.                 label Phase
  312.                 callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
  313. oscFM->phase=64-(int) o->value();
  314. fmoscil->redraw();}
  315.                 xywh {665 395 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  316.                 code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);}
  317.               }
  318.               Fl_Choice {} {
  319.                 label Use
  320.                 callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
  321. if ((int) o->value() != 0) {
  322.     oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
  323.     changeFMoscilbutton->labelcolor(FL_BLUE);
  324. } else { 
  325.     oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
  326.     changeFMoscilbutton->labelcolor(FL_BLACK);
  327. };
  328. voiceFMparametersgroup->redraw();} open
  329.                 xywh {560 390 75 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
  330.                 code0 {o->add("Internal");}
  331.                 code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
  332.                 code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);}
  333.               } {}
  334.             }
  335.             Fl_Choice {} {
  336.               label {External Mod.}
  337.               callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
  338. if ((int) o->value() != 0) {
  339.     modoscil->deactivate();
  340.     modfrequency->deactivate();
  341. } else { 
  342.     modoscil->activate();
  343.     modfrequency->activate();
  344. };
  345. voiceFMparametersgroup->redraw();} open
  346.               xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  347.               code0 {o->add("OFF");}
  348.               code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
  349.               code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);}
  350.               code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
  351.             } {}
  352.           }
  353.           Fl_Choice {} {
  354.             label {Type:}
  355.             callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
  356. if (o->value()==0) voiceFMparametersgroup->deactivate();
  357. else voiceFMparametersgroup->activate();
  358. o->redraw();}
  359.             xywh {535 40 80 20} down_box BORDER_BOX align 5
  360.             code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);}
  361.           } {
  362.             menuitem {} {
  363.               label OFF
  364.               xywh {40 40 100 20} labelfont 1
  365.             }
  366.             menuitem {} {
  367.               label MORPH
  368.               xywh {50 50 100 20} labelfont 1
  369.             }
  370.             menuitem {} {
  371.               label RING
  372.               xywh {60 60 100 20} labelfont 1
  373.             }
  374.             menuitem {} {
  375.               label PM
  376.               xywh {70 70 100 20} labelfont 1
  377.             }
  378.             menuitem {} {
  379.               label FM
  380.               xywh {80 80 100 20} labelfont 1
  381.             }
  382.             menuitem {} {
  383.               label PITCH
  384.               xywh {90 90 100 20} labelfont 1 deactivate
  385.             }
  386.           }
  387.           Fl_Group {} {
  388.             label FREQUENCY
  389.             xywh {5 250 525 120} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  390.           } {
  391.             Fl_Group voicefreqenvgroup {
  392.               label {ADSynth Voice - Frequency Envelope} open
  393.               xywh {10 290 205 70} box FLAT_BOX color 51 align 144
  394.               code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);}
  395.               code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();}
  396.               class EnvelopeUI
  397.             } {}
  398.             Fl_Check_Button {} {
  399.               label Enable
  400.               callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
  401. if (o->value()==0) voicefreqenvgroup->deactivate();
  402. else voicefreqenvgroup->activate();
  403. o->redraw();}
  404.               tooltip {Forced Relase} xywh {15 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  405.               code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);}
  406.             }
  407.             Fl_Group voicefreqlfogroup {
  408.               label {Frequency LFO     } open
  409.               xywh {215 290 230 70} box FLAT_BOX color 47 align 144
  410.               code0 {o->init(pars->VoicePar[nvoice].FreqLfo);}
  411.               code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();}
  412.               class LFOUI
  413.             } {}
  414.             Fl_Check_Button {} {
  415.               label Enable
  416.               callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
  417. if (o->value()==0) voicefreqlfogroup->deactivate();
  418. else voicefreqlfogroup->activate();
  419. o->redraw();}
  420.               tooltip {Forced Relase} xywh {220 295 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  421.               code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);}
  422.             }
  423.             Fl_Counter {} {
  424.               label Octave
  425.               callback {int k=(int) o->value();
  426. if (k<0) k+=16;
  427. pars->VoicePar[nvoice].PCoarseDetune = k*1024+
  428.    pars->VoicePar[nvoice].PCoarseDetune%1024;}
  429.               tooltip Octave xywh {470 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  430.               code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;}
  431.               code1 {if (k>=8) k-=16;}
  432.               code2 {o->value(k);}
  433.             }
  434.             Fl_Counter {} {
  435.               label {Coarse Det.}
  436.               callback {int k=(int) o->value();
  437. if (k<0) k+=1024;
  438. pars->VoicePar[nvoice].PCoarseDetune = k+
  439.    (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;}
  440.               tooltip {Coarse Detune} xywh {455 340 60 20} labelsize 11 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  441.               code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;}
  442.               code1 {if (k>=512) k-=1024;}
  443.               code2 {o->value(k);}
  444.               code3 {o->lstep(10);}
  445.             }
  446.             Fl_Slider {} {
  447.               callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
  448. detunevalueoutput->do_callback();}
  449.               tooltip {Fine Detune (cents)} xywh {58 272 392 13} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  450.               code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
  451.             }
  452.             Fl_Value_Output detunevalueoutput {
  453.               label Detune
  454.               callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  455.               xywh {10 272 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  456.               code0 {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
  457.             }
  458.             Fl_Check_Button {} {
  459.               label 440Hz
  460.               callback {int x=(int) o->value();
  461. pars->VoicePar[nvoice].Pfixedfreq=x;
  462. if (x==0) fixedfreqetdial->deactivate();
  463.     else fixedfreqetdial->activate();}
  464.               tooltip {Set the voice base frequency to 440Hz} xywh {345 253 55 15} down_box DOWN_BOX labelfont 1 labelsize 12
  465.               code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);}
  466.             }
  467.             Fl_Dial fixedfreqetdial {
  468.               label {Eq.T.}
  469.               callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();}
  470.               tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 255 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
  471.               code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);}
  472.               code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();}
  473.               class WidgetPDial
  474.             }
  475.             Fl_Choice {} {
  476.               label {Detune Type}
  477.               callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value();
  478. detunevalueoutput->do_callback();} open
  479.               xywh {450 305 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  480.               code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  481.               code1 {o->value(pars->VoicePar[nvoice].PDetuneType);}
  482.             } {}
  483.           }
  484.           Fl_Group voiceoscil {
  485.             xywh {80 375 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
  486.             code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
  487.             code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;}
  488.             code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
  489.           } {}
  490.           Fl_Button changevoiceoscilbutton {
  491.             label Change
  492.             callback {if (oscedit!=NULL) delete(oscedit);
  493.  
  494. int nv=nvoice;
  495. if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
  496.  
  497. oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);}
  498.             xywh {5 475 65 20} box THIN_UP_BOX labelfont 1 labelsize 12
  499.             code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);}
  500.           }
  501.           Fl_Box {} {
  502.             label {Voice Oscillator}
  503.             xywh {5 375 75 35} labelfont 1 align 128
  504.           }
  505.           Fl_Slider {} {
  506.             label Phase
  507.             callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
  508. osc->phase=64-(int) o->value();
  509. voiceoscil->redraw();}
  510.             xywh {10 420 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
  511.             code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);}
  512.           }
  513.           Fl_Check_Button {} {
  514.             label {R.}
  515.             callback {pars->VoicePar[nvoice].Presonance=(int) o->value();}
  516.             tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 12
  517.             code0 {o->value(pars->VoicePar[nvoice].Presonance);}
  518.           }
  519.           Fl_Choice {} {
  520.             label {Use Oscil.}
  521.             callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
  522. if ((int) o->value() != 0) {
  523.     osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
  524.     changevoiceoscilbutton->labelcolor(FL_BLUE);
  525. } else { 
  526.     osc->init(pars->VoicePar[nvoice].OscilSmp,master);
  527.     changevoiceoscilbutton->labelcolor(FL_BLACK);
  528. };
  529.  
  530. voiceparametersgroup->redraw();
  531. voiceonbutton->redraw();} open
  532.             xywh {5 455 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  533.             code0 {o->add("Internal");}
  534.             code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};}
  535.             code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);}
  536.           } {}
  537.         }
  538.         Fl_Group {} {
  539.           label AMPLITUDE
  540.           xywh {5 40 240 210} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  541.         } {
  542.           Fl_Value_Slider {} {
  543.             label Vol
  544.             callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
  545.             tooltip Volume xywh {10 60 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  546.             code0 {o->value(pars->VoicePar[nvoice].PVolume);}
  547.           }
  548.           Fl_Value_Slider {} {
  549.             label {V.Sns}
  550.             callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();}
  551.             tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  552.             code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);}
  553.           }
  554.           Fl_Group voiceampenvgroup {
  555.             label {ADSynth Voice - Amplitude Envelope} open
  556.             xywh {10 105 205 70} box FLAT_BOX color 51 align 144
  557.             code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);}
  558.             code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();}
  559.             class EnvelopeUI
  560.           } {}
  561.           Fl_Dial {} {
  562.             label Pan
  563.             callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
  564.             tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  565.             code0 {o->value(pars->VoicePar[nvoice].PPanning);}
  566.             class WidgetPDial
  567.           }
  568.           Fl_Check_Button {} {
  569.             label Enable
  570.             callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
  571. if (o->value()==0) voiceampenvgroup->deactivate();
  572. else voiceampenvgroup->activate();
  573. o->redraw();}
  574.             tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  575.             code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);}
  576.           }
  577.           Fl_Group voiceamplfogroup {
  578.             label {Amplitude LFO     } open
  579.             xywh {10 175 230 70} box FLAT_BOX color 47 align 144
  580.             code0 {o->init(pars->VoicePar[nvoice].AmpLfo);}
  581.             code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();}
  582.             class LFOUI
  583.           } {}
  584.           Fl_Check_Button {} {
  585.             label Enable
  586.             callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
  587. if (o->value()==0) voiceamplfogroup->deactivate();
  588. else voiceamplfogroup->activate();
  589. o->redraw();}
  590.             tooltip {Forced Relase} xywh {15 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  591.             code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);}
  592.           }
  593.           Fl_Check_Button {} {
  594.             label Minus
  595.             callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();}
  596.             xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
  597.             code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);}
  598.           }
  599.         }
  600.         Fl_Group voicefiltergroup {
  601.           label FILTER
  602.           xywh {245 5 285 245} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  603.           code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();}
  604.         } {
  605.           Fl_Group {} {
  606.             label {ADsynth Voice - Filter} open
  607.             xywh {250 30 275 75} box FLAT_BOX color 50 align 144
  608.             code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);}
  609.             class FilterUI
  610.           } {}
  611.           Fl_Group voicefilterenvgroup {
  612.             label {ADSynth Voice - Filter Envelope} open
  613.             xywh {250 105 275 70} box FLAT_BOX color 51 align 144
  614.             code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);}
  615.             code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();}
  616.             class EnvelopeUI
  617.           } {}
  618.           Fl_Check_Button {} {
  619.             label Enable
  620.             callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
  621. if (o->value()==0) voicefilterenvgroup->deactivate();
  622. else voicefilterenvgroup->activate();
  623. o->redraw();}
  624.             tooltip {Forced Relase} xywh {255 110 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
  625.             code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);}
  626.           }
  627.           Fl_Group voicefilterlfogroup {
  628.             label {Filter LFO     } open
  629.             xywh {250 175 230 70} box FLAT_BOX color 47 align 144
  630.             code0 {o->init(pars->VoicePar[nvoice].FilterLfo);}
  631.             code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();}
  632.             class LFOUI
  633.           } {}
  634.           Fl_Check_Button {} {
  635.             label Enable
  636.             callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
  637. if (o->value()==0) voicefilterlfogroup->deactivate();
  638. else voicefilterlfogroup->activate();
  639. o->redraw();}
  640.             tooltip {Forced Relase} xywh {255 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 12 align 24
  641.             code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);}
  642.           }
  643.         }
  644.         Fl_Group {} {
  645.           label 01
  646.           xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 30 align 16
  647.           code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
  648.         } {}
  649.         Fl_Choice {} {
  650.           callback {int x=(int) o->value();
  651. pars->VoicePar[nvoice].Type=x;
  652. if (x==0) voicemodegroup->activate();
  653.   else voicemodegroup->deactivate();
  654. noiselabel->do_callback();}
  655.           tooltip {Oscillator Type (sound/noise)} xywh {5 500 65 20} down_box BORDER_BOX labelsize 11 textfont 1 textsize 11
  656.           code0 {o->value(pars->VoicePar[nvoice].Type);}
  657.           code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();}
  658.         } {
  659.           menuitem {} {
  660.             label Sound
  661.             xywh {5 5 100 20} labelfont 1 labelsize 13
  662.           }
  663.           menuitem {} {
  664.             label NOISE
  665.             xywh {15 15 100 20} labelfont 1 labelsize 13 labelcolor 1
  666.           }
  667.         }
  668.         Fl_Check_Button bypassfiltercheckbutton {
  669.           label {Bypass Global F.}
  670.           callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();}
  671.           xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148
  672.           code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);}
  673.         }
  674.         Fl_Group {} {
  675.           xywh {115 5 95 35} box THIN_UP_BOX
  676.         } {
  677.           Fl_Value_Slider {} {
  678.             label Delay
  679.             callback {pars->VoicePar[nvoice].PDelay=(int)o->value();}
  680.             tooltip Volume xywh {120 21 84 12} type {Horz Knob} box FLAT_BOX labelsize 12 align 5 maximum 127 step 1
  681.             code0 {o->value(pars->VoicePar[nvoice].PDelay);}
  682.           }
  683.         }
  684.         Fl_Check_Button {} {
  685.           label Enable
  686.           callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
  687. if (o->value()==0) voicefiltergroup->deactivate();
  688. else voicefiltergroup->activate();
  689. o->redraw();
  690. bypassfiltercheckbutton->redraw();}
  691.           tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 12
  692.           code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);}
  693.         }
  694.         Fl_Box noiselabel {
  695.           label {White Noise}
  696.           callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  697.           xywh {150 415 300 65} labelfont 1 labelsize 50 labelcolor 7
  698.           code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
  699.         }
  700.       }
  701.       Fl_Check_Button voiceonbutton {
  702.         label On
  703.         callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
  704. if (o->value()==0) voiceparametersgroup->deactivate();
  705. else voiceparametersgroup->activate();
  706. o->redraw();}
  707.         xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 16
  708.         code0 {o->value(pars->VoicePar[nvoice].Enabled);}
  709.       }
  710.     }
  711.   }
  712.   Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
  713.     code {nvoice=0;
  714. pars=NULL;
  715. oscedit=NULL;} {}
  716.   }
  717.   Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
  718.     code {pars=parameters;
  719. nvoice=nvoice_;
  720. master=master_;
  721. make_window();
  722. end();
  723. ADnoteVoiceParameters->show();} {}
  724.   }
  725.   Function {~ADvoiceUI()} {} {
  726.     code {ADnoteVoiceParameters->hide();
  727. hide();
  728. if (oscedit!=NULL) {
  729.     delete(oscedit);
  730. };
  731. //delete (ADnoteVoiceParameters);} {}
  732.   }
  733.   decl {int nvoice;} {}
  734.   decl {ADnoteParameters *pars;} {}
  735.   decl {OscilEditor *oscedit;} {}
  736.   decl {Oscilloscope *osc;} {}
  737.   decl {Oscilloscope *oscFM;} {}
  738.   decl {Master *master;} {}
  739.  
  740. class ADnoteUI {: {public PresetsUI_}
  741. } {
  742.   Function {make_window()} {private
  743.   } {
  744.     Fl_Window ADnoteGlobalParameters {
  745.       label {ADsynth Global Parameters of the Instrument}
  746.       xywh {66 187 535 405} type Double hide
  747.     } {
  748.       Fl_Group {} {
  749.         label FREQUENCY
  750.         xywh {5 255 525 115} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  751.       } {
  752.         Fl_Group freqenv {
  753.           label {ADSynth Global - Frequency Envelope} open
  754.           xywh {10 295 205 70} box FLAT_BOX color 51 align 144
  755.           code0 {o->init(pars->GlobalPar.FreqEnvelope);}
  756.           class EnvelopeUI
  757.         } {}
  758.         Fl_Counter octave {
  759.           label Octave
  760.           callback {int k=(int) o->value();
  761. if (k<0) k+=16;
  762. pars->GlobalPar.PCoarseDetune = k*1024+
  763.    pars->GlobalPar.PCoarseDetune%1024;}
  764.           tooltip Octave xywh {450 275 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 12
  765.           code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;}
  766.           code2 {o->value(k);}
  767.         }
  768.         Fl_Counter coarsedet {
  769.           label {Coarse det.}
  770.           callback {int k=(int) o->value();
  771. if (k<0) k+=1024;
  772. pars->GlobalPar.PCoarseDetune = k+
  773.    (pars->GlobalPar.PCoarseDetune/1024)*1024;}
  774.           tooltip {Coarse Detune} xywh {455 345 60 20} labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 12
  775.           code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;}
  776.           code2 {o->value(k);}
  777.           code3 {o->lstep(10);}
  778.         }
  779.         Fl_Group freqlfo {
  780.           label {Frequency LFO     } open
  781.           xywh {215 295 230 70} box FLAT_BOX color 47 align 144
  782.           code0 {o->init(pars->GlobalPar.FreqLfo);}
  783.           class LFOUI
  784.         } {}
  785.         Fl_Slider freq {
  786.           callback {pars->GlobalPar.PDetune=(int)o->value()+8192;
  787. detunevalueoutput->do_callback();}
  788.           tooltip {Fine Detune (cents)} xywh {60 275 385 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
  789.           code0 {o->value(pars->GlobalPar.PDetune-8192);}
  790.         }
  791.         Fl_Value_Output detunevalueoutput {
  792.           label Detune
  793.           callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  794.           xywh {12 275 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
  795.           code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
  796.         }
  797.         Fl_Choice detunetype {
  798.           label {Detune Type}
  799.           callback {pars->GlobalPar.PDetuneType=(int) o->value()+1;
  800. detunevalueoutput->do_callback();} open
  801.           xywh {450 315 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
  802.           code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
  803.           code1 {o->value(pars->GlobalPar.PDetuneType-1);}
  804.         } {}
  805.         Fl_Dial {} {
  806.           label relBW
  807.           callback {pars->GlobalPar.PBandwidth=(int) o->value();
  808.  
  809. pars->getBandwidthDetuneMultiplier();
  810.  
  811. for (int i=0;i<NUM_VOICES;i++){
  812.   voicelistitem[i]->refreshlist();
  813. };}
  814.           tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {500 270 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  815.           code0 {o->value(pars->GlobalPar.PBandwidth);}
  816.           class WidgetPDial
  817.         }
  818.       }
  819.       Fl_Group {} {
  820.         label AMPLITUDE
  821.         xywh {5 5 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  822.       } {
  823.         Fl_Value_Slider volume {
  824.           label Vol
  825.           callback {pars->GlobalPar.PVolume=(int)o->value();}
  826.           tooltip Volume xywh {10 30 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  827.           code0 {o->value(pars->GlobalPar.PVolume);}
  828.         }
  829.         Fl_Value_Slider vsns {
  830.           label {V.Sns}
  831.           callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();}
  832.           tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 12 align 8 maximum 127 step 1
  833.           code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);}
  834.         }
  835.         Fl_Dial pan {
  836.           label Pan
  837.           callback {pars->GlobalPar.PPanning=(int) o->value();}
  838.           tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
  839.           code0 {o->value(pars->GlobalPar.PPanning);}
  840.           class WidgetPDial
  841.         }
  842.         Fl_Dial pstr {
  843.           label {P.Str.}
  844.           callback {pars->GlobalPar.PPunchStrength=(int) o->value();}
  845.           tooltip {Punch Strength} xywh {125 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  846.           code0 {o->value(pars->GlobalPar.PPunchStrength);}
  847.           class WidgetPDial
  848.         }
  849.         Fl_Dial pt {
  850.           label {P.t.}
  851.           callback {pars->GlobalPar.PPunchTime=(int) o->value();}
  852.           tooltip {Punch Time (duration)} xywh {155 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  853.           code0 {o->value(pars->GlobalPar.PPunchTime);}
  854.           class WidgetPDial
  855.         }
  856.         Fl_Dial pstc {
  857.           label {P.Stc.}
  858.           callback {pars->GlobalPar.PPunchStretch=(int) o->value();}
  859.           tooltip {Punch Stretch} xywh {185 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  860.           code0 {o->value(pars->GlobalPar.PPunchStretch);}
  861.           class WidgetPDial
  862.         }
  863.         Fl_Dial pvel {
  864.           label {P.Vel.}
  865.           callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();}
  866.           tooltip {Punch Velocity Sensing} xywh {215 227 25 25} box ROUND_UP_BOX labelsize 11 align 1 maximum 127 step 1
  867.           code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);}
  868.           class WidgetPDial
  869.         }
  870.         Fl_Group ampenv {
  871.           label {ADSynth Global - Amplitude Envelope} open
  872.           xywh {10 75 205 70} box FLAT_BOX color 51 align 144
  873.           code0 {o->init(pars->GlobalPar.AmpEnvelope);}
  874.           class EnvelopeUI
  875.         } {}
  876.         Fl_Group amplfo {
  877.           label {Amplitude LFO          } open
  878.           xywh {10 145 230 70} box FLAT_BOX color 47 align 144
  879.           code0 {o->init(pars->GlobalPar.AmpLfo);}
  880.           class LFOUI
  881.         } {}
  882.         Fl_Check_Button rndgrp {
  883.           label {Rnd Grp}
  884.           callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
  885.           tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 225 40 25} down_box DOWN_BOX labelsize 10 align 148
  886.           code0 {o->value(pars->GlobalPar.Hrandgrouping);}
  887.         }
  888.       }
  889.       Fl_Group {} {
  890.         label FILTER
  891.         xywh {245 5 285 250} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
  892.       } {
  893.         Fl_Group filterenv {
  894.           label {ADSynth Global - Filter Envelope} open
  895.           xywh {250 110 275 70} box FLAT_BOX color 51 align 144
  896.           code0 {o->init(pars->GlobalPar.FilterEnvelope);}
  897.           class EnvelopeUI
  898.         } {}
  899.         Fl_Group filterlfo {
  900.           label {Filter LFO} open
  901.           xywh {250 180 230 70} box FLAT_BOX color 47 align 144
  902.           code0 {o->init(pars->GlobalPar.FilterLfo);}
  903.           class LFOUI
  904.         } {}
  905.         Fl_Group filterui {
  906.           label {ADsynth Global - Filter} open
  907.           xywh {250 35 275 75} box FLAT_BOX color 50 align 144
  908.           code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);}
  909.           class FilterUI
  910.         } {}
  911.       }
  912.       Fl_Check_Button stereo {
  913.         label Stereo
  914.         callback {pars->GlobalPar.PStereo=(int) o->value();}
  915.         xywh {5 220 65 35} box ENGRAVED_BOX down_box DOWN_BOX labelfont 1 labelsize 12
  916.         code0 {o->value(pars->GlobalPar.PStereo);}
  917.       }
  918.       Fl_Button {} {
  919.         label {Show Voice List}
  920.         callback {for (int i=0;i<NUM_VOICES;i++){
  921.   voicelistitem[i]->refreshlist();
  922. }
  923. ADnoteVoiceList->show();}
  924.         xywh {180 375 125 25}
  925.       }
  926.       Fl_Button {} {
  927.         label {Show Voice Parameters}
  928.         callback {ADnoteVoice->show();}
  929.         xywh {5 375 170 25} labelfont 1
  930.       }
  931.       Fl_Button {} {
  932.         label Close
  933.         callback {ADnoteGlobalParameters->hide();}
  934.         xywh {470 375 60 25} box THIN_UP_BOX
  935.       }
  936.       Fl_Button {} {
  937.         label Resonance
  938.         callback {resui->resonancewindow->redraw();
  939. resui->resonancewindow->show();}
  940.         tooltip Resonance xywh {309 375 86 25} box THIN_UP_BOX
  941.       }
  942.       Fl_Button {} {
  943.         label C
  944.         callback {presetsui->copy(pars);}
  945.         xywh {405 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  946.       }
  947.       Fl_Button {} {
  948.         label P
  949.         callback {presetsui->paste(pars,this);}
  950.         xywh {435 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  951.       }
  952.     }
  953.     Fl_Window ADnoteVoice {
  954.       label {ADsynth Voice Parameters}
  955.       xywh {53 58 765 560} type Double hide
  956.     } {
  957.       Fl_Group advoice {
  958.         xywh {0 0 760 525} box BORDER_BOX
  959.         code0 {o->init(pars,nvoice,master);}
  960.         code1 {o->show();}
  961.         class ADvoiceUI
  962.       } {}
  963.       Fl_Button {} {
  964.         label {Close Window}
  965.         callback {ADnoteVoice->hide();}
  966.         xywh {300 530 195 25} box THIN_UP_BOX labelfont 1
  967.       }
  968.       Fl_Counter currentvoicecounter {
  969.         label {Current Voice}
  970.         callback {nvoice=(int)o->value()-1;
  971. advoice->hide();
  972. ADnoteVoice->remove(advoice);
  973. delete advoice;
  974. advoice=new ADvoiceUI(0,0,765,525);
  975. ADnoteVoice->add(advoice);
  976. advoice->init(pars,nvoice,master);
  977. advoice->show();
  978. ADnoteVoice->redraw();}
  979.         xywh {5 530 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 18
  980.         code0 {o->bounds(1,NUM_VOICES);}
  981.       }
  982.       Fl_Button {} {
  983.         label C
  984.         callback {presetsui->copy(pars,nvoice);}
  985.         xywh {700 535 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  986.       }
  987.       Fl_Button {} {
  988.         label P
  989.         callback {presetsui->paste(pars,this,nvoice);}
  990.         xywh {730 535 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 12 labelcolor 7
  991.       }
  992.     }
  993.     Fl_Window ADnoteVoiceList {
  994.       label {ADsynth Voices list}
  995.       xywh {32 266 650 260} type Double hide
  996.     } {
  997.       Fl_Text_Display {} {
  998.         label {No.}
  999.         xywh {10 15 30 10} box NO_BOX labelfont 1 labelsize 13
  1000.       }
  1001.       Fl_Text_Display {} {
  1002.         label Vol
  1003.         xywh {145 15 30 10} box NO_BOX labelfont 1 labelsize 13
  1004.       }
  1005.       Fl_Text_Display {} {
  1006.         label Detune
  1007.         xywh {384 15 25 10} box NO_BOX labelfont 1 labelsize 13
  1008.       }
  1009.       Fl_Text_Display {} {
  1010.         label Pan
  1011.         xywh {210 15 30 10} box NO_BOX labelfont 1 labelsize 13
  1012.       }
  1013.       Fl_Text_Display {} {
  1014.         label {Vib. Depth}
  1015.         xywh {560 15 30 10} box NO_BOX labelfont 1 labelsize 13
  1016.       }
  1017.       Fl_Text_Display {} {
  1018.         label {R.}
  1019.         xywh {245 15 25 10} box NO_BOX labelfont 1 labelsize 13
  1020.       }
  1021.       Fl_Button {} {
  1022.         label {Hide Voice List}
  1023.         callback {ADnoteVoiceList->hide();}
  1024.         xywh {255 237 125 20}
  1025.       }
  1026.       Fl_Scroll {} {open
  1027.         xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX
  1028.       } {
  1029.         Fl_Pack {} {open
  1030.           xywh {0 20 620 210}
  1031.           code0 {for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}}
  1032.         } {}
  1033.       }
  1034.     }
  1035.   }
  1036.   Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} {
  1037.     code {pars=parameters;
  1038. master=master_;
  1039. nvoice=0;
  1040. resui=new ResonanceUI(pars->GlobalPar.Reson);
  1041. make_window();} {}
  1042.   }
  1043.   Function {~ADnoteUI()} {} {
  1044.     code {ADnoteVoiceList->hide();
  1045. ADnoteGlobalParameters->hide();
  1046. ADnoteVoice->hide();
  1047. delete(ADnoteVoiceList);
  1048. delete(ADnoteGlobalParameters);
  1049. delete(ADnoteVoice);
  1050. delete(resui);} {}
  1051.   }
  1052.   Function {refresh()} {} {
  1053.     code {volume->value(pars->GlobalPar.PVolume);
  1054. vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
  1055. pan->value(pars->GlobalPar.PPanning);
  1056.  
  1057. stereo->value(pars->GlobalPar.PStereo);
  1058. rndgrp->value(pars->GlobalPar.Hrandgrouping);
  1059.  
  1060. pstr->value(pars->GlobalPar.PPunchStrength);
  1061. pt->value(pars->GlobalPar.PPunchTime);
  1062. pstc->value(pars->GlobalPar.PPunchStretch);
  1063. pvel->value(pars->GlobalPar.PPunchVelocitySensing);
  1064.  
  1065. detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
  1066. freq->value(pars->GlobalPar.PDetune-8192);
  1067.  
  1068. int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
  1069. octave->value(k);
  1070.  
  1071. detunetype->value(pars->GlobalPar.PDetuneType-1);
  1072. k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
  1073. coarsedet->value(k);
  1074. amplfo->refresh();
  1075. freqlfo->refresh();
  1076. filterlfo->refresh();
  1077.  
  1078. ampenv->refresh();
  1079. freqenv->refresh();
  1080. filterenv->refresh();
  1081. filterui->refresh();
  1082.  
  1083. for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
  1084.  
  1085. resui->refresh();
  1086. currentvoicecounter->do_callback();} {}
  1087.   }
  1088.   decl {ADnoteParameters *pars;} {}
  1089.   decl {ResonanceUI *resui;} {}
  1090.   decl {Master *master;} {}
  1091.   decl {int nvoice;} {}
  1092.   decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {}
  1093.